Path Traversal이란?
Path Traversal 취약점은 파일 업로드 및 다운로드 취약점에 포함됩니다.
Path Traversal 취약점은
../
, /
와 같은 메타문자를 사용하여 임의의 디렉터리에 파일을 업로드 및 다운로드 가능한 취약점 입니다.Example
아래 코드는 Flask를 이용하여 만든 업로드 기능이 페이지입니다.
from flask import Flask, request app = Flask(__name__) @app.route('/Upload', methods = ['GET', 'POST']) def upload_file(): if request.method == 'POST': file = request.files['file'] file.save("./public/" + file.filename) return 'Success' else: return """ <form action="/Upload" method="POST" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit"/> </form> """ if __name__ == '__main__': app.run()
정상적으로 파일을 업로드 하게 되면
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F872dc325-dd5a-4ce8-838d-8d5cf2e12de6%2FUntitled.png?table=block&id=51ba6cbf-e0b5-4487-8d14-48a9aecc4f9c&cache=v2)
정상적으로
./public
위치에 업로드가 된 것을 볼 수 있습니다.![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Ff690d5eb-d28c-4093-af26-c29705c4afec%2FUntitled.png?table=block&id=c2d457ef-092c-4274-bad9-765bc1f136b1&cache=v2)
프록시 도구를 통해 Path Traversal 업로드를 진행해 보았습니다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Fe2db6586-7adc-4961-9dae-5860ae1ec605%2FUntitled.png?table=block&id=973a3b6d-1925-4010-b770-9e99d3ab1af8&cache=v2)
아래와 같이
../
를 입력하였기 때문에 ./public
의 상위 디렉토리에 저장됩니다.![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F6b65a72f-26fc-470b-a3e7-7ee5ea292e16%2FUntitled.png?table=block&id=26ebcdb5-c34d-4f99-aeaa-78916853c13e&cache=v2)
이와 같은 방식으로 Path Traversal 취약점이 존재하는 업로드나 다운로드 서비스는 중요 파일을 다운로드 및 중요 위치에 악성파일을 업로드 가능합니다.
따라서 해당 취약점이 존재한다면 매우 위험한 취약점 중 하나라고 할 수 있습니다.